package com.ysq.controller;

import com.ysq.controller.result.Result;
import com.ysq.entity.AddressBook;
import com.ysq.service.AddressBookService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * ClassName: AddressBookController
 * Package: com.ysq.controller
 * Description:
 *
 * @Author YSQ
 * @Create 2023/1/6 - 9:23
 */
@RestController
@RequestMapping("/addressBook")
@Slf4j
public class AddressBookController {
    @Autowired
    private AddressBookService service;

    /**
     * 新增地址
     *
     * @param addressBook 前端传来的用户新建的地址信息
     * @return 返回统一结果封装类
     */
    @PostMapping
    public Result<String> save(@RequestBody AddressBook addressBook) {
        boolean flag = service.save(addressBook);
        return flag ? Result.success("地址保存成功~~~") : Result.error("地址保存失败~~~");
    }

    /**
     * 显示用户地址信息
     *
     * @return 返回统一结果封装类
     */
    @GetMapping("/list")
    public Result<List<AddressBook>> list() {
        List<AddressBook> addressBooks = service.selectList();
        return Result.success(addressBooks);
    }

    /**
     * 设置默认地址
     *
     * @param addressBook 前端传来的要设置为默认地址的地址ID
     * @return 返回统一结果封装类
     */
    @PutMapping("/default")
    public Result<AddressBook> setDefault(@RequestBody AddressBook addressBook) {
        AddressBook addressBook1 = service.setDefault(addressBook);
        return Result.success(addressBook1);
    }

    /**
     * 编辑地址界面的数据回显
     *
     * @param id 前端传来的要编辑地址的地址ID
     * @return 返回统一结果封装类
     */
    @GetMapping("/{id}")
    public Result<AddressBook> selectAddress(@PathVariable Long id) {
        //先看看能不能接受到前端数据
        log.info(id.toString());
        //调用业务层方法 获得对应ID地址信息
        AddressBook addressBook = service.selectAddress(id);
        return Result.success(addressBook);
    }

    /**
     * 更新地址信息
     *
     * @param addressBook 前端传来的编辑地址表单页面的地址信息
     * @return 返回统一结果封装类
     */
    @PutMapping
    public Result<String> update(@RequestBody AddressBook addressBook) {
        //先看看能不能接受到数据
        log.info(addressBook.toString());
        //调用业务层方法 在address_book表中更新对应的地址信息
        boolean flag = service.update(addressBook);
        return flag ? Result.success("保存地址信息成功~~~") : Result.error("保存地址信息失败~~~");
    }

    /**
     * 删除地址信息
     *
     * @param id 前端传来的要删除的地址的ID
     * @return 返回统一结果封装类
     */
    @DeleteMapping
    public Result<String> delete(@RequestParam("ids") Long id) {
        //调用业务层方法 在address_book中删除对应的地址信息
        boolean flag = service.delete(id);
        return flag ? Result.success("删除地址信息成功~~~") : Result.error("删除地址信息失败~~~");
    }

    /**
     * 获取当前用户默认地址信息
     *
     * @return 返回统一结果封装类
     */
    @GetMapping("/default")
    public Result<AddressBook> getDefault() {
        //调用业务层查询当前用户默认地址的方法, 得到当前用户的设置的默认地址信息
        AddressBook addressBook = service.getDefault();
        //将其返回给前端
        return Result.success(addressBook);
    }
}
